package cn.xiaobai.core.domain.schedule;

import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledFuture;

/**
 * 工作调度
 *
 * @Author yangdaji
 * @Date 2023/12/11
 * @PackageName cn.xiaobai.core.domain.schedule
 * @ClassName TaskExecute
 */
public interface TaskExecutorProcessor {

    /**
     * 启动异步线程任务
     *
     * @param task
     */
    void startAsync(Runnable task);

    /**
     * 启动周期线程任务,时间单位: s
     *
     * @param task    执行任务
     * @param seconds 周期时间(s)
     * @return
     */
    ScheduledFuture startPeriodly(Runnable task, long seconds);

    /**
     * 启动周期线程任务, 时间单位: ms
     *
     * @param task         执行任务
     * @param milliSeconds 周期时间(ms)
     * @return
     */
    ScheduledFuture startPeriodlyMilliSeconds(Runnable task, long milliSeconds);

    /**
     * 启动独立线程执行任务,无管理的线程
     *
     * @param task     执行任务
     * @param taskName 任务名称
     */
    void startExclusively(Runnable task, String taskName);

    /**
     * 启动可回调的线程任务
     *
     * @param callable 回调接口
     * @return
     */
    Future<?> startOnNewThread(Callable callable);
}
